جزوه · متغیرها در لینوکس ← بازگشت به فهرست
📘 فصل اول · قسمت ششم متغیرها در لینوکس
📅 تاریخ: ۱۴۰۵/۰۵/۱۷ 👤 مدرس: محمد عابدینی

▍ متغیرها چیستند؟

متغیرها در لینوکس محل‌هایی برای ذخیره‌سازی اطلاعات هستند که در طول اجرای سیستم یا اسکریپت‌ها از آن‌ها استفاده می‌شود. این اطلاعات می‌توانند شامل اعداد، رشته‌های متنی، مسیرها و تنظیمات مختلف باشند. متغیرها به برنامه‌نویسان و کاربران کمک می‌کنند تا داده‌ها را به صورت دینامیک مدیریت کنند و کدهای قابل انعطاف‌تری بنویسند.

📌 تعریف متغیر در Bash:

در پوسته Bash (و اکثر شل‌های لینوکس)، متغیرها با علامت = تعریف می‌شوند. نکته مهم این است که قبل و بعد از علامت = نباید فاصله باشد.

$ name="احمد" # تعریف متغیر name با مقدار احمد
$ age=25 # تعریف متغیر age با مقدار 25

▍ نمایش محتوای متغیرها

برای نمایش محتوای یک متغیر، از echo به همراه علامت $ استفاده می‌شود. علامت $ به شل می‌گوید که مقدار متغیر را جایگزین کند.

📝 مثال:
$ name="علی" $ echo $name علی
$ echo "سلام $name عزیز" سلام علی عزیز

▍ مشاهده همه متغیرها با env

دستور env (مخفف Environment) همه متغیرهای محیطی (Environment Variables) را نمایش می‌دهد. این متغیرها شامل تنظیمات سیستم، مسیرها و اطلاعات مربوط به کاربر فعلی هستند.

📝 نحوه استفاده:
$ env SHELL=/bin/bash
PWD=/home/user
USER=user
HOME=/home/user
PATH=/usr/local/bin:/usr/bin:/bin
... (و متغیرهای دیگر)

خروجی env معمولاً طولانی است و شامل متغیرهای زیادی می‌شود.

💡 نکته:

اگر فقط می‌خواهید یک متغیر خاص را ببینید، از echo $نام_متغیر استفاده کنید. برای مثال: echo $PATH

▍ تفاوت متغیرها در شل‌های مختلف

روش تعریف متغیرها در شل‌های مختلف (Bash، Zsh، Fish، Sh، ...) ممکن است کمی متفاوت باشد. اما رایج‌ترین شل در لینوکس Bash است و تقریباً تمام دستورات در این جزوه برای Bash نوشته شده‌اند.

شل روش تعریف نکته
Bash var="value" استاندارد لینوکس
Zsh var="value" مشابه Bash
Fish set var "value" روش متفاوت با set
Sh var="value" مشابه Bash اما قدیمی‌تر
⚠️ مهم:

در همه شل‌ها برای استفاده از مقدار متغیر باید از علامت $ استفاده کرد، ولی برای تعریف متغیر نیازی به $ نیست.

▍ متغیرهای Global (سراسری) و Local (محلی)

متغیرها در لینوکس به دو دسته اصلی تقسیم می‌شوند: سراسری (Global) و محلی (Local).

🌍 متغیر سراسری (Global)

  • در همه جای سیستم قابل دسترس است
  • به همه پروسس‌ها و شل‌های فرزند به ارث می‌رسد
  • معمولاً با export ساخته می‌شوند
  • مثال: PATH، HOME، USER
  • با env قابل مشاهده هستند

🏠 متغیر محلی (Local)

  • فقط در همان شل فعلی قابل دسترس است
  • به شل‌های فرزند ارث داده نمی‌شود
  • با تعریف ساده (بدون export) ساخته می‌شوند
  • مثال: myvar="hello"
  • با env قابل مشاهده نیستند

• مثال عملی تفاوت Global و Local

📝 تعریف متغیر محلی:
$ local_var="من محلی هستم" $ echo $local_var من محلی هستم

حالا اگر یک شل جدید باز کنیم (bash)، این متغیر در دسترس نیست:

$ bash $ echo $local_var (خالی - هیچ چیزی نمایش داده نمی‌شود)
📝 تعریف متغیر سراسری با export:
$ export global_var="من سراسری هستم" $ echo $global_var من سراسری هستم

حالا اگر یک شل جدید باز کنیم، این متغیر در دسترس است:

$ bash $ echo $global_var من سراسری هستم
✅ خلاصه تفاوت به زبان ساده:
  • متغیر محلی: مثل یک یادداشت شخصی در اتاق شماست. فقط خودتان در همان اتاق می‌توانید آن را ببینید.
  • متغیر سراسری: مثل یک تابلو اعلانات در کل ساختمان است. همه می‌توانند آن را ببینند و از آن استفاده کنند.

▍ معروف‌ترین متغیرهای محیطی

• متغیر PS1 (Prompt String 1)

متغیر PS1 ظاهر خط فرمان (Prompt) را در ترمینال تعیین می‌کند. با تغییر این متغیر می‌توانید ظاهر خط فرمان را به سلیقه خود تغییر دهید.

📝 مثال:
$ echo $PS1 \u@\h:\w\$

\u = نام کاربر، \h = نام هاست، \w = مسیر جاری

$ PS1="[\u@\h] \$ " # تغییر ظاهر به [user@host] $

• متغیر SHLVL (SHell LeVeL)

متغیر SHLVL تعداد شل‌های تو در تو (تعداد سطح شل) را نمایش می‌دهد. هر بار که یک شل جدید باز می‌کنید یا از bash درون bash استفاده می‌کنید، این عدد یک واحد افزایش می‌یابد.

📝 مثال:
$ echo $SHLVL 1

در شل اصلی، مقدار SHLVL برابر 1 است.

$ bash $ echo $SHLVL 2

با ورود به یک شل جدید، مقدار به 2 افزایش یافت.

• متغیر PATH

متغیر PATH یکی از مهم‌ترین متغیرهای محیطی است. این متغیر شامل لیستی از مسیرها است که سیستم در آن‌ها به دنبال فایل‌های اجرایی (Executable Files) می‌گردد.

📝 مثال:
$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

وقتی دستوری مثل ls را اجرا می‌کنید، سیستم به ترتیب در این مسیرها به دنبال فایل ls می‌گردد.

💡 نکته:

برای اضافه کردن یک مسیر جدید به PATH: export PATH=$PATH:/مسیر/جدید

• متغیر EDITOR

متغیر EDITOR ویرایشگر پیش‌فرض سیستم را مشخص می‌کند. بسیاری از برنامه‌ها (مانند git، crontab و ...) از این متغیر برای انتخاب ویرایشگر متن استفاده می‌کنند.

📝 مثال:
$ echo $EDITOR /usr/bin/nano

اگر این متغیر تعریف نشده باشد، معمولاً vi یا nano به عنوان پیش‌فرض استفاده می‌شود.

$ export EDITOR=vim # تنظیم ویرایشگر پیش‌فرض به vim

▍ جدول خلاصه متغیرهای مهم

نام متغیر توضیح مثال مقدار
PS1 ظاهر خط فرمان \u@\h:\w\$
SHLVL سطح شل فعلی 1 یا 2 یا 3
PATH مسیرهای جستجوی فایل‌های اجرایی /usr/bin:/bin:/usr/local/bin
EDITOR ویرایشگر پیش‌فرض /usr/bin/nano یا vim
HOME دایرکتوری خانه کاربر /home/user
USER نام کاربر جاری user
PWD دایرکتوری جاری /home/user/Documents
SHELL شل پیش‌فرض کاربر /bin/bash

▍ جمع‌بندی

✅ تمرین پیشنهادی:

۱. با env همه متغیرهای محیطی را مشاهده کنید.
۲. یک متغیر محلی به نام my_name تعریف کنید و مقدار آن را با echo نمایش دهید.
۳. همان متغیر را با export به سراسری تبدیل کنید و یک شل جدید باز کنید و مقدار آن را بررسی کنید.
۴. ظاهر خط فرمان خود را با تغییر PS1 به [\u@\h] $ تغییر دهید.
۵. مسیر PATH خود را مشاهده کنید و یک مسیر دلخواه به آن اضافه کنید.